package com.qfedu.aunt.commons.result;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @author xiaobobo
 * @title: R
 * @projectName aunt_commons_2209
 * @description: 返回的结果集的封装类
 * 做前后分离项目的时候 返回的都是 JSON格式的数据
 * 下面这个是结果集返回的统一的类
 * @date 2022/10/24  15:42
 */
@Data
@ApiModel(value = "统一返回结果集")
public class R {

    @ApiModelProperty(value = "返回的状态码")
    private Integer code;
    @ApiModelProperty(value = "错误的提示信息")
    private String message;
    @ApiModelProperty(value = "返回给客户端的数据封装")
    private HashMap data=new HashMap();

    private R(){}

    /**
     * 表示的是请求成功的响应
     */
    public static R ok(){
        R r = new R();
        r.code=ResponseCode.SUCCESS.getCode();
        r.message=ResponseCode.SUCCESS.getMessage();
        return r;
    }

    /**
     * 请求失败的返回
     * @param code
     * @param message
     * @return
     */
    public static R error(Integer code,String message){
        R r = new R();
        r.code=code;
        r.message=message;
        return r;
    }

    /**
     * 请求失败的封装
     * @return
     */
    public static R error(){
        R r = new R();
        r.code=ResponseCode.ERROR.getCode();
        r.message=ResponseCode.ERROR.getMessage();
        return r;
    }


    /**
     * 请求设置返回数据的封装
     * @param key
     * @param object
     * @return
     */
    public R setData(String key,Object object){
       this.data.put(key,object);
       return this;
    }

    /**
     * 设置返回数据
     * @param objs
     * @return
     */
    public R setData(HashMap<String,Object> objs){
        Set<Map.Entry<String, Object>> entries = objs.entrySet();
        Iterator<Map.Entry<String, Object>> it = entries.iterator();
        while (it.hasNext()){
            Map.Entry<String, Object> next = it.next();
            String key = next.getKey();
            Object value = next.getValue();
            this.data.put(key,value);
        }
        return this;
    }

    /**
     * 放数据的方法
     * @param objs
     * @return
     */
    public R setMapData(HashMap objs){
        this.data=objs;
        return this;
    }
}
